<!DOCTYPE html>
<html lang="en-us">

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

  	<meta property="og:title" content=" 中间件的方法 &middot;  我的博客" />
  	<meta property="og:site_name" content="我的博客" />
  	<meta property="og:url" content="/my_technology/f/" />
    
    
  	<meta property="og:type" content="article" />

    <meta property="og:article:published_time" content="2020-05-11T21:22:28&#43;08:00" />

    
    

  <title>
     中间件的方法 &middot;  我的博客
  </title>

    <meta name="description" content="这里是付佳康的个人博客" />

    <meta name="HandheldFriendly" content="True" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <link rel="shortcut icon" href="/my_technology/images/favicon.ico">
	  <link rel="apple-touch-icon" href="/my_technology/images/apple-touch-icon.png" />
    
    <link rel="stylesheet" type="text/css" href="/my_technology/css/screen.css" />
    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Merriweather:300,700,700italic,300italic|Open+Sans:700,400|Inconsolata" />


    
      
          <link href="/my_technology/index.xml" rel="alternate" type="application/rss+xml" title="我的博客" />
      
      
    
    <meta name="generator" content="Hugo 0.68.3" />

    <link rel="canonical" href="/my_technology/f/" />

     
</head>
<body class="nav-closed">
<div id="particles-js"></div>
  


 <div class="site-wrapper">



<header class="main-header " style="background-image: url(/my_technology/images/user.jpg)">

    <nav class="main-nav overlay clearfix">
        
            <a class="blog-logo" href="/my_technology/"><img src="/my_technology/images/user.png" alt="Blog Logo" /></a>
        
        
    </nav>
<div class="vertical">
        <div class="main-header-content inner">
            <h1 class="page-title">
              <a class="btn-bootstrap-2" href="#content">我的博客</a>
          </h1>
          <h2 class="page-description">这里是付佳康的个人博客</h2>
        </div>
</div>
    <a class="scroll-down icon-arrow-left" href="#content"><span class="hidden">Scroll Down</span></a>
</header>

  <main id="content" class="content" role="main">


  <article class="post ">

    <header class="post-header">
        <h1 class="post-title">中间件的方法</h1>
        <section class="post-meta">
        
         
        </section>
    </header>

    <section class="post-content">
      <pre><code>
什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统，用于在全局范围内改变Django的输入和输出。每个中间件组件负责做一些特定的功能。

中间件的五种方法

process_request

    1.执行时间：在视图函数之前，在路由匹配之前
    2.参数：
      request：请求对象，与视图中用到的request参数是同一个对象
    3.返回值：
      None：按照正常的流程走
      HttpResponse：接着倒序执行当前中间件的以及之前执行过的中间件的process_response方法，不再执行其它的所有方法
    4.执行顺序：按照MIDDLEWARE中的注册的顺序执行，也就是此列表的索引值
process_response

    1.执行时间：最后执行
    2.参数：
      request：请求对象，与视图中用到的request参数是同一个对象
      response：响应对象，与视图中返回的response是同一个对象
    4.返回值：
      response：必须返回此对象，按照正常的流程走
    5.执行顺序：按照注册的顺序倒序执行
process_view

    1.执行时间：在process_request方法及路由匹配之后，视图之前
      参数：
      request：请求对象，与视图中用到的request参数是同一个对象
      view_func：将要执行的视图函数（它是实际的函数对象，而不是函数的名称作为字符串）
      view_args：url路径中将传递给视图的位置参数的元组
      view_kwargs：url路径中将传递给视图的关键值参数的字典
    2.返回值：
      None：按照正常的流程走
      HttpResponse：它之后的中间件的process_view，及视图不执行，执行所有中间件的process_response方法
    3.执行顺序：按照注册的顺序执行
process_template_response 此方法必须在视图函数返回的对象有一个render()方法（或者表明该对象是一个TemplateResponse对象或等价方法）时，才被执行

    1.执行时间：视图之后，process_exception之前
    2.参数：
      request：请求对象，与视图中用到的request参数是同一个对象
      response：是TemplateResponse对象（由视图函数或者中间件产生）
    3.返回值：
      response：必须返回此对象，按照正常的流程走
    4.执行顺序：按照注册的顺序倒序执行
process_exception 此方法只在视图中触发异常时才被执行.

    1.执行时间：视图之后，process_response之前
    2.参数：
      request：请求对象，与视图中用到的request参数是同一个对象
      exception：视图函数异常产生的Exception对象
    3.返回值：
      None：按照正常的流程走
      HttpResponse对象：不再执行后面的process_exception方法
    4.执行顺序：按照注册的顺序倒序执行


</code></pre>
    </section>


  <footer class="post-footer">


    
    <figure class="author-image">

        <a class="img" href="/my_technology/" style="background-image: url(/my_technology/images/user.png)"><span class="hidden">付佳康</span></a>
    </figure>
    

    <section class="author">

  <p>付佳康</p>
  

</section>


    
    <section class="share">
      <h4>Share this page</h4>
      <a class="icon-twitter" style="font-size: 1.4em" href="https://twitter.com/share?text=%e4%b8%ad%e9%97%b4%e4%bb%b6%e7%9a%84%e6%96%b9%e6%b3%95&amp;url=%2fmy_technology%2ff%2f"
          onclick="window.open(this.href, 'twitter-share', 'width=550,height=235');return false;">
          <span class="hidden">Twitter</span>
      </a>
      <a class="icon-facebook" style="font-size: 1.4em" href="https://www.facebook.com/sharer/sharer.php?u=%2fmy_technology%2ff%2f"
          onclick="window.open(this.href, 'facebook-share','width=580,height=296');return false;">
          <span class="hidden">Facebook</span>
      </a>
      <a class="icon-google-plus" style="font-size: 1.4em" href="https://plus.google.com/share?url=%2fmy_technology%2ff%2f"
         onclick="window.open(this.href, 'google-plus-share', 'width=490,height=530');return false;">
          <span class="hidden">Google+</span>
      </a>
    </section>
    

    
    
    

  </footer>
</article>

</main>
    <footer class="site-footer clearfix">
        <section class="copyright"><a href="">我的博客</a> </section>
        
        <section class="poweredby">Proudly generated by <a class="icon-hugo" href="https://gohugo.io">HUGO</a>, with <a class="icon-theme" href="https://github.com/syui/hugo-theme-air">hugo-theme-air</a> theme</section>
        
    </footer>
    </div>
    <script type="text/javascript" src="/my_technology/js/jquery.js"></script>
    <script type="text/javascript" src="/my_technology/js/jquery.fitvids.js"></script>
    <script type="text/javascript" src="/my_technology/js/index.js"></script>
    <script src="/my_technology/js/particles.min.js"></script>
    <script src="/my_technology/js/particles.js"></script>  

</body>
</html>

